#!/usr/bin/env node

/**
 * 测试 Git Hooks 配置
 */

import { execSync } from 'child_process'
import fs from 'fs'
import path from 'path'

console.log('🔍 检查 Git Hooks 配置...\n')

// 1. 检查 .husky 目录
const huskyDir = '.husky'
if (fs.existsSync(huskyDir)) {
  console.log('✅ .husky 目录存在')
} else {
  console.log('❌ .husky 目录不存在')
  process.exit(1)
}

// 2. 检查 hooks 文件
const hooks = ['pre-commit', 'commit-msg']
hooks.forEach(hook => {
  const hookPath = path.join(huskyDir, hook)
  if (fs.existsSync(hookPath)) {
    console.log(`✅ ${hook} 文件存在`)
    const content = fs.readFileSync(hookPath, 'utf-8')
    if (content.includes('#!/usr/bin/env sh')) {
      console.log(`   ✓ ${hook} 包含正确的 shebang`)
    } else {
      console.log(`   ⚠️  ${hook} 缺少 shebang`)
    }
  } else {
    console.log(`❌ ${hook} 文件不存在`)
  }
})

// 3. 检查 Git 配置
try {
  const hooksPath = execSync('git config core.hooksPath', { encoding: 'utf-8' }).trim()
  console.log(`\n✅ Git hooks 路径: ${hooksPath}`)
} catch (error) {
  console.log('\n⚠️  Git hooks 路径未设置，尝试设置...')
  try {
    execSync('git config core.hooksPath .husky')
    console.log('✅ 已设置 Git hooks 路径为 .husky')
  } catch (err) {
    console.log('❌ 设置失败，请手动运行: git config core.hooksPath .husky')
  }
}

// 4. 检查 lint-staged 配置
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'))
if (packageJson['lint-staged']) {
  console.log('\n✅ lint-staged 配置存在')
} else {
  console.log('\n❌ lint-staged 配置不存在')
}

// 5. 检查 commitlint 配置
if (fs.existsSync('commitlint.config.js')) {
  console.log('✅ commitlint.config.js 存在')
} else {
  console.log('❌ commitlint.config.js 不存在')
}

console.log('\n📋 测试结果总结:')
console.log('   如果所有检查都通过，hooks 应该可以正常工作')
console.log('\n🧪 手动测试方法:')
console.log('   1. 修改一个文件: echo "test" >> README.md')
console.log('   2. 添加到暂存区: git add README.md')
console.log('   3. 尝试提交: git commit -m "test: 测试提交"')
console.log('   4. 应该会看到 lint-staged 运行')
console.log('\n💡 如果 hooks 不工作，请运行:')
console.log('   git config core.hooksPath .husky')

